package org.alg.digraph;

/**
 * Created by Administrator on 15-5-12.
 */
public class DirectedDFS {
    private boolean[] marked;

    public DirectedDFS(Digraph G,int s){
        marked=new boolean[G.V()];
        dfs(G,s);
    }

    public DirectedDFS(Digraph G,Iterable<Integer> sources){
        marked=new boolean[G.V()];
        for(int s:sources){
            if(!marked[s])
                dfs(G,s);
        }
    }

    private void dfs(Digraph G,int v){
        marked[v]=true;
        for(int w:G.adj(v)){
            if(!marked[w])
                dfs(G,w);
        }
    }

    public boolean marked(int v){
        return marked[v];
    }
}
